package com.pp.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.pp.common.pojo.User;
import com.pp.mapper.UserMapper;
import com.pp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;



@Service
public class UserServiceImpl implements UserService {
    //注入Usermapper的接口,该接口继承了mybatispuls的工具接口,可以进行简单的数据库操作(不建议多表联查)

    @Autowired
    private UserMapper userMapper;

    @Override
    //重写了接口的方法
    public String useradd(User user) {
        //获取用户密码
        String password = user.getPassword();
        //把用户密码通过BC得类进行加密
        String newpassword = encodePwd(password);
        //将加密的密码重新注入USER类
        user.setPassword(newpassword);
        //new一个条件构造器
        QueryWrapper<User>queryWrapper=new QueryWrapper<>();
        //条件构造器的条件是username是用户输入的username
        queryWrapper.eq("username", user.getUsername());
        //通过usermapper的接口方法进行查询(传入带有用户名的条件构造器),该方法只会返回一个结果,获得User的对象
        User user1 = userMapper.selectOne(queryWrapper);
        //如果对象不等于空就代表这个用户名存在
        if(user1!=null){
            throw new RuntimeException("该用户已存在");
        }
        //如果这个对象是空的那就对数据进行添加,通过接口的方法
        userMapper.insert(user);
       return "成功";
    }


    public String encodePwd(String password){
        //new一个加密类
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
        //吧传进来的密码放进BC类的自带方法然后进行加密
        String salt = encoder.encode(password);
        //返回加密的密码给调用者
        return salt;

    }


}
